package com.youpai.platform.vulture.service.channel;

import com.youpai.platform.vulture.common.entity.AccessMessage;
import io.netty.channel.Channel;

import java.net.InetSocketAddress;

/**
 * @date: 2022/7/8 22:52
 * @author: Anna
 * @version: 1.0
 * @description: Vulture对Netty Channel的抽象
 */
public interface VultureChannel {

    /**
     * 获取本地ip
     *
     * @return 本地ip
     */
    InetSocketAddress getLocalAddress();

    /**
     * 获取远程ip
     *
     * @return 远程ip
     */
    InetSocketAddress getRemoteAddress();

    /**
     * 发送消息
     *
     * @param msg 消息
     */
    void send(AccessMessage msg);

    /**
     * vulture 是否已经可用
     *
     * @return 是否已经可用
     */
    boolean isActive();

    /**
     * 激活通道
     */
    void makeActive();

    /**
     * 获取channel
     *
     * @return netty channel
     */
    Channel getChannel();

    /**
     * 获取连接时间
     *
     * @return 连接时间
     */
    long getFirstConnectTime();

    /**
     * 获取最后收到心跳的时间
     *
     * @return 最后收到心跳的时间
     */
    long getLastReceiveHeartbeatTime();

    /**
     * 刷新收到心跳的最后时间
     *
     */
    void refreshLastReceiveHeartbeatTime();

}
